using System;
using System.Text;
using Cfg.Attributes;
using Cfg.ValidationAttributes;

namespace Cfg.Test
{
	public class TestConfig
	{
        [Required]
        public static TestEnum Enum { get; set; }

        [Required]
        public static TestEnum Enum2 { get; set; }

        [Required]
        public static TestEnum EnumThatHasIvalidValue { get; set; }

		public static string StringValue { get; set; }
		public static string StringValueThatDoesNotExistInConfigFile { get; set; }
		public static string[] StringArray { get; set; }
		public static string[] StringArrayThatDoesNotExistInConfig { get; set; }

        [Required]
        public static string RequiredFieldThatDoesNotExistInConfig { get; set; }
        
        [Required,Default("default")]
        public static string RequiredFieldwithDefaultValue { get; set; }
		
        public static int IntValue { get; set; }
		public static int IntValueOutOfBounds { get; set; }
		public static int IntValueThatDoesNotExistInConfigfile { get; set; }

        [Max(10)]
        public static int IntValueWithMaxConstraint { get; set; }
        
        [Max(10)]
        public static int IntValueWithMaxConstraintOutOfBounds { get; set; }

        [Min(10)]
        public static int IntValueWithMinConstraint { get; set; }
        
        [Min(10)]
        public static int IntValueWithMinConstraintOutOfBounds { get; set; }

		public static int? NullableIntWithValue { get; set; }
		public static int? NullableIntWithoutValue { get; set; }

		public static int[] IntArray { get; set; }

		public static long LongValue { get; set; }
		public static long LongValueThatDoesNotExistInConfigfile { get; set; }


		public static bool BooleanTrue { get; set; }
		public static bool BooleanFalse { get; set; }


		public class SubConfig1
		{
			[Path]
			public static string Path { get; set; }
		}

		public byte[] SomeFileContents { get; set; }


		public void X(Binder b)
		{
			
		}
	}

    public enum TestEnum
    {
        A = 1,
        B = 2
    }

    public class Binder
	{
		
	}
}